# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

# Setup the MHV Devops Home locations so that Vagrantfile can be dropped in path relative to 
# project home and still have access to provisioning scripts.
if ENV['MHV_DEVOPS_HOME']
	MHV_DEVOPS_HOME = ENV['MHV_DEVOPS_HOME']
else
	MHV_DEVOPS_HOME = "."
end

# Setup the downloads folder for Vagrant to use when provisioning
if ENV['MHV_INSTALLS_DIR']
	MHV_INSTALLS_DIR = ENV['MHV_INSTALLS_DIR']
else
	MHV_INSTALLS_DIR = "./downloads"	
end

# Setup the downloads folder for Vagrant to use when provisioning
if ENV['MHV_LIFERAY_DEPLOY_DIR']
	MHV_LIFERAY_DEPLOY_DIR = ENV['MHV_LIFERAY_DEPLOY_DIR']
else
	MHV_LIFERAY_DEPLOY_DIR = "c:\data\deploy"	
end

# Set the ORACLE SID
if ENV['MHV_ORACLE_SID']
	MHV_ORACLE_SID = ENV['MHV_ORACLE_SID']
else
	MHV_ORACLE_SID = "ORCL"
end

if ENV['MHV_DB_LOCAL'] == 'YES'
	MHV_DB_ID = 'LDB'						# Local DB
	MHV_DB_INFO = 'IP:PORT:ORCL'	# Local DB Connect String
else
	MHV_DB_ID = ENV['MHV_DB_ID']
	MHV_DB_INFO = ENV['MHV_DB_INFO']
end

MHV_DB_LOCAL = ENV['MHV_DB_LOCAL']

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.define "portal", primary: false do |portal|
    portal.vm.box = "puppetlabs/centos-6.5-64-puppet"
    portal.vm.box_url = "http://DNS/tools/boxes/centos-6.5-x86_64.box"
    portal.vm.hostname = "liferay.local"
    
    portal.vm.synced_folder "#{MHV_DEVOPS_HOME}/src/main", "/vagrant", :mount_options => ["dmode=777","fmode=777"]
    portal.vm.synced_folder "#{MHV_INSTALLS_DIR}", "/installs", :mount_options => ["dmode=777","fmode=777"]
    portal.vm.synced_folder "#{MHV_LIFERAY_DEPLOY_DIR}", "/deploy", :mount_options => ["dmode=777","fmode=777"]
    
    portal.vm.network :private_network, ip: "IP", virtualbox__intnet: true
    
    portal.vm.network :forwarded_port, host: PORT, guest: PORT, id: "ssh", host_ip: "127.0.0.1"         # reset ssh port 
    portal.vm.network :forwarded_port, host: PORT,   guest: PORT,   host_ip: "127.0.0.1"	              # liferay on tomcat
    portal.vm.network :forwarded_port, host: PORT,  guest: PORT,  host_ip: "127.0.0.1"	              # liferay on tomcat
    portal.vm.network :forwarded_port, host: PORT, guest: PORT, host_ip: "127.0.0.1"                  # liferay on tomcat debug port
    portal.vm.network :forwarded_port, host: PORT, guest: PORT, host_ip: "127.0.0.1"                  # jmx listening port
    
    portal.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--cpus", "4"]
      vb.customize ["modifyvm", :id, "--memory", "3072"]
      vb.customize ["modifyvm", :id, "--name", "mhv_portal_dev"]
	  vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
	  vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    end
    
    # Display the environment
    portal.vm.provision :shell, :inline => <<-EOF
    	echo ""
    	echo "*******************************************************************"
    	echo "* Environment Information"
    	echo "*" 
  		echo "* - Environment Variable 'MHV_DB_LOCAL' 	= #{MHV_DB_LOCAL}"
		echo "* - Environment Variable 'MHV_DB_ID' 		= #{MHV_DB_ID}"
		echo "* - Environment Variable 'MHV_DB_INFO' 	= #{MHV_DB_INFO}"
		echo "*"
		echo "*******************************************************************"
		echo ""
  	EOF
	
	portal.vm.provision :shell, :inline => "sudo rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/US/Eastern /etc/localtime", :run => "always"
	portal.vm.provision :shell, :inline => "echo 'export JDK_FILENAME=jdk-8u152-linux-x64.tar.gz' >> ~/.bash_profile"
    portal.vm.provision :shell, :inline => "echo 'export JDK_INSTALL_LOCATION=/usr/java/jdk1.8.0_152' >> ~/.bash_profile"
    portal.vm.provision :shell, :inline => "echo 'export VAGRANT_LIFERAY_SP=sp20' >> ~/.bash_profile" 
	portal.vm.provision :shell, :inline => "echo 'export VAGRANT_LIFERAY_BUILD_ID=20170717160924965' >> ~/.bash_profile"
	portal.vm.provision :shell, :inline => "echo 'export VAGRANT_LIFERAY_BASE_VERSION=6.2-ee' >> ~/.bash_profile"
	portal.vm.provision :shell, :inline => "echo 'export VAGRANT_TOMCAT_VERSION=7.0.62' >> ~/.bash_profile"
	portal.vm.provision :shell, :inline => "echo 'export MHV_DB_ID=#{MHV_DB_ID}' >> ~/.bash_profile"
    portal.vm.provision :shell, :inline => "echo 'export MHV_DB_INFO=#{MHV_DB_INFO}' >> ~/.bash_profile"
    portal.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/liferay/ossetup-tomcat.sh"
    portal.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/liferay/tomcatLiferayInstall.sh"
    portal.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/liferay/updateLog4jConf.sh", :run => "always"
  	portal.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/liferay/httpdConf.sh", :run => "always"
    portal.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/liferay/tomcatStart.sh", :run => "always"
    portal.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/liferay/jRebelConfiguration.sh"
    
  end
  
  # development host system for API / Services tier of MHV
  config.vm.define "api" , primary: false do |api|
  
    api.vm.box = "puppetlabs/centos-6.5-64-puppet"
    api.vm.box_url = "http://DNS/tools/boxes/centos-6.5-x86_64.box"
    
    api.vm.hostname = "api.local"
    api.vm.synced_folder "#{MHV_DEVOPS_HOME}/src/main", "/vagrant" #, nfs: true, :mount_options => ["dmode=777","fmode=777"]
    api.vm.synced_folder "#{MHV_DEVOPS_HOME}/src/test/wsdl", "/wsdl" #, nfs: true, :mount_options => ["dmode=777","fmode=777"]
    api.vm.synced_folder "#{MHV_INSTALLS_DIR}", "/installs", nfs: true #, :mount_options => ["dmode=777","fmode=777"]
    
    api.vm.network :private_network, ip: "IP", virtualbox__intnet: true
    
    api.vm.network :forwarded_port, host: PORT, guest: PORT, id: "ssh", host_ip: "127.0.0.1"          # reset ssh port
    api.vm.network :forwarded_port, host: PORT, guest: PORT, host_ip: "127.0.0.1"                   # admin console port
    api.vm.network :forwarded_port, host: PORT, guest: PORT, host_ip: "127.0.0.1"                   # ms01a
    api.vm.network :forwarded_port, host: PORT, guest: PORT, host_ip: "127.0.0.1"                   # ms01a debug
    api.vm.network :forwarded_port, host: PORT, guest: PORT, host_ip: "127.0.0.1"                   # mockey
    
    api.vm.provider :virtualbox do |vb|
	  vb.customize ["modifyvm", :id, "--cpus", "2"]
      vb.customize ["modifyvm", :id, "--memory", "3072"]
      vb.customize ["modifyvm", :id, "--name", "mhv_api_dev"]
	  vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
	  vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    end
    
    # Display the environment
    api.vm.provision :shell, :inline => <<-EOF
    	echo ""
    	echo "*******************************************************************"
    	echo "* Environment Information"
    	echo "*" 
  		echo "* - Environment Variable 'MHV_DB_LOCAL' 	= #{MHV_DB_LOCAL}"
		echo "* - Environment Variable 'MHV_DB_ID' 		= #{MHV_DB_ID}"
		echo "* - Environment Variable 'MHV_DB_INFO' 	= #{MHV_DB_INFO}"
		echo "*"
		echo "*******************************************************************"
		echo ""
  	EOF

	# Set the timezone for the VM    
    api.vm.provision :shell, :inline => "sudo rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/US/Eastern /etc/localtime", :run => "always"
    
    # Allow password authentication, since we're only running in development
    #api.vm.provision :shell, :inline => "sudo echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config && sudo systemctl restart sshd"
    #api.vm.provision :shell, :inline => "sudo cat /etc/ssh/sshd_config", :run => "always"
    
    # Normal provisioning
    api.vm.provision :shell, :inline => "echo 'export SCRIPTS_HOME=/vagrant/services' >> ~/.bash_profile"
    api.vm.provision :shell, :inline => "echo 'export DOMAIN_NAME=services.dev' >> ~/.bash_profile"
    api.vm.provision :shell, :inline => "echo 'export JDK_FILENAME=jdk-8u152-linux-x64.tar.gz' >> ~/.bash_profile"
    api.vm.provision :shell, :inline => "echo 'export JDK_INSTALL_LOCATION=/usr/java/jdk1.8.0_152' >> ~/.bash_profile"
    api.vm.provision :shell, :inline => "echo 'export ORCACLE_SID=#{MHV_ORACLE_SID}' >> ~/.bash_profile"
    api.vm.provision :shell, :inline => "echo 'export WEBLOGIC_USER_HOME=/home/weblogic' >> ~/.bash_profile"
    api.vm.provision :shell, :inline => "echo 'export JAVA_PREFS_FILENAME=.java_services_dev_ms0a' >> ~/.bash_profile"
    api.vm.provision :shell, :inline => "echo 'export MHV_DB_ID=#{MHV_DB_ID}' >> ~/.bash_profile"
    api.vm.provision :shell, :inline => "echo 'export MHV_DB_INFO=#{MHV_DB_INFO}' >> ~/.bash_profile"
    api.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/ossetup.sh"
    api.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/weblogicInstallation.sh"
    api.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/weblogicDomainConfiguration.sh"
    api.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/weblogicNodeManagerStart.sh", :run => "always"
    api.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/weblogicAdminServerStart.sh"
    api.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/weblogicManagedServersConfig.sh"
    api.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/weblogicClusterStart.sh"
	
  end
  
  config.vm.define "mhvdb", primary: false do |mhvdb|

	mhvdb.vm.box = "mhv/ol7"
	mhvdb.vm.box_url = "http://DNS/tools/boxes/oracle-linux-7.box"

	# if you receive an error about vbguest as an unknown configuration run "vagrant plugin uninstall vagrant-vbguest" followed by "vagrant plugin install vagrant-vbguest"
    # mhvdb.vbguest.auto_update = false
    mhvdb.ssh.insert_key = false
  
  	# Network Info + Port Forwarding	 
	mhvdb.vm.hostname = "mhvdb.local"
	mhvdb.vm.network :private_network, ip: "IP", virtualbox__intnet: true
	
	mhvdb.vm.network :forwarded_port, host: PORT, guest: PORT, id: "ssh", host_ip: "127.0.0.1"  # reset ssh port
	mhvdb.vm.network :forwarded_port, host: PORT, guest: PORT, host_ip: "127.0.0.1"
	mhvdb.vm.network :forwarded_port, host: PORT, guest: PORT, host_ip: "127.0.0.1"
	
	# Sync'd Folders
    mhvdb.vm.synced_folder "#{MHV_DEVOPS_HOME}/src/main/mhvdbs", "/vagrant" 			
    mhvdb.vm.synced_folder "#{MHV_INSTALLS_DIR}", "/installs"								
	
	mhvdb.vm.provider :virtualbox do |vb|
	  vb.customize ["modifyvm", :id, "--cpus", "2"]
	  vb.customize ["modifyvm", :id, "--memory", "2048"]
      vb.customize ["modifyvm", :id, "--name", "mhv_dbs_dev"]
	  vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
	  vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
	end
	
	# Display the environment
    mhvdb.vm.provision :shell, :inline => <<-EOF
    	echo "*******************************************************************"
    	echo "* Environment Information"
    	echo "*" 
  		echo "* - Environment Variable 'MHV_DB_LOCAL' 	= #{MHV_DB_LOCAL}"
		echo "* - Environment Variable 'MHV_DB_ID' 		= #{MHV_DB_ID}"
		echo "* - Environment Variable 'MHV_DB_INFO' 	= #{MHV_DB_INFO}"
		echo "*"
		echo "*******************************************************************"
  	EOF
	
	mhvdb.vm.provision :shell, :inline => "sudo rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/US/Eastern /etc/localtime", :run => "always"

	# Setup ORACLE
	mhvdb.vm.provision :shell, :inline => "echo 'export MHV_DB_ID=#{MHV_DB_ID}' >> ~/.bash_profile"
	mhvdb.vm.provision :shell, path: "#{MHV_DEVOPS_HOME}/src/main/mhvdbs/install.sh"

	# Load data
	mhvdb.vm.provision :shell, path: "#{MHV_DEVOPS_HOME}/src/main/mhvdbs/load_data.sh"

    # This modifies an existing admin user for use during development (Credentials: admin/admin1234)
    
    if ENV['MHV_DB_LOCAL'] == 'YES'
    	mhvdb.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/mhvdbs/scripts/updateAdminUser.sh", :run => "always"
    	mhvdb.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/mhvdbs/scripts/updateSiteVirtualHost.sh", :run => "always"
    	mhvdb.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/mhvdbs/scripts/updatePortalPreferencesLdapPort.sh", :run => "always"
    	mhvdb.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/mhvdbs/scripts/insertLocalProperties.sh", :run => "always"
    end
    
  end
  
  # development host system for Batch domain of MHV
  config.vm.define "batch" , primary: false do |batch|
    
    batch.vm.box = "puppetlabs/centos-6.5-64-puppet"
    batch.vm.box_url = "http://DNS/tools/boxes/centos-6.5-x86_64.box"
    
    batch.vm.hostname = "batch.local"
    batch.vm.synced_folder "#{MHV_DEVOPS_HOME}/src/main", "/vagrant", :mount_options => ["dmode=777","fmode=777"]
    batch.vm.synced_folder "#{MHV_DEVOPS_HOME}/src/test/wsdl", "/wsdl", :mount_options => ["dmode=777","fmode=777"]
    batch.vm.synced_folder "#{MHV_INSTALLS_DIR}", "/installs", :mount_options => ["dmode=777","fmode=777"]
    
    batch.vm.network :private_network, ip: "IP", virtualbox__intnet: true
    
    batch.vm.network :forwarded_port, host: PORT, guest: PORT, id: "ssh", host_ip: "127.0.0.1"          # reset ssh port
    batch.vm.network :forwarded_port, host: PORT, guest: PORT, host_ip: "127.0.0.1"                   # admin console
    batch.vm.network :forwarded_port, host: PORT, guest: PORT, host_ip: "127.0.0.1"                   # ms01a
    batch.vm.network :forwarded_port, host: PORT, guest: PORT, host_ip: "127.0.0.1"                   # ms01a debug
    
    batch.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--cpus", "2"]
      vb.customize ["modifyvm", :id, "--memory", "3072"]
      vb.customize ["modifyvm", :id, "--name", "mhv_batch_dev"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    end
    
    batch.vm.provision :shell, :inline => "sudo rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/US/Eastern /etc/localtime", :run => "always"
    batch.vm.provision :shell, :inline => "echo 'export SCRIPTS_HOME=/vagrant/services' >> ~/.bash_profile"
    batch.vm.provision :shell, :inline => "echo 'export DOMAIN_NAME=mhv.batch.dev' >> ~/.bash_profile"
    batch.vm.provision :shell, :inline => "echo 'export JDK_FILENAME=jdk-8u152-linux-x64.tar.gz' >> ~/.bash_profile"
    batch.vm.provision :shell, :inline => "echo 'export JDK_INSTALL_LOCATION=/usr/java/jdk1.8.0_152' >> ~/.bash_profile"
    batch.vm.provision :shell, :inline => "echo 'export ORCACLE_SID=#{MHV_ORACLE_SID}' >> ~/.bash_profile"
    batch.vm.provision :shell, :inline => "echo 'export WEBLOGIC_USER_HOME=/home/weblogic' >> ~/.bash_profile"
    batch.vm.provision :shell, :inline => "echo 'export JAVA_PREFS_FILENAME=.java_batch_dev_ms0a' >> ~/.bash_profile"
    batch.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/ossetup.sh"
    batch.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/postfix-setup.sh"
    batch.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/weblogicInstallation.sh"
    batch.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/weblogicDomainConfiguration.sh"
    batch.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/weblogicNodeManagerStart.sh", :run => "always"
    batch.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/weblogicAdminServerStart.sh"
    batch.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/weblogicManagedServersConfig.sh"
    batch.vm.provision :shell, :path   => "#{MHV_DEVOPS_HOME}/src/main/services/weblogicClusterStart.sh"
  
  end
  
end
